home *** CD-ROM | disk | FTP | other *** search
File List | 1996-09-18 | 10.7 KB | 452 lines |
- vers$=" FNT_ED.GFA, V.1/o, 4.April.91, ATARI-ST/TT, v.Pfr.S.Just,6936 Haag,Kirchweg 5 "
- '
- ' ON ERROR GOSUB schluss
- ON BREAK GOSUB schluss
- ON MENU KEY GOSUB m_getkey
- ON MENU GOSUB m_deal
- '
- @m_init
- @m_aufbau
- @main
- @schluss
- END
- '
- PROCEDURE m_init
- LOCAL h%,n%,nmax%,mmax%,hx%,d%,i%,dummy%,h$
- '
- scrn_breit_pix%=WORK_OUT(0)
- scrn_hoeh_pix%=WORK_OUT(1)
- scrn_mono!=(WORK_OUT(35)=0)
- scrn_breit_byt%=INT{L~A+2}
- '
- esc$=CHR$(27)
- inv$=esc$+"p"
- norm$=esc$+"q"
- '
- m_dat:
- ' MERGE-Punkt
- DATA Desk ,0, CLS,0,----------------,0, ,0, ,0, ,0, ,0, ,0, ,0, ,0,""
- DATA Datei ,0, Laden,1, Speichern,2,------,0, QUIT,3,""
- DATA Font ,0, WechsleFont,4, Blank,6, System-Font,7, Invers,8, dünner,9, fetter,10, rotieren,23,- Horizontal<>,0, spiegeln,0, dehnen,0, stauchen,0,-Vertikal ^v,0, spiegeln,0, dehnen,0, stauchen,0,""
- DATA Buchstabe ,0,-Auch Direkt!,0, Copy->Puffer,15, Paste,16, Kill,17, Invers,18, Tauschen,19, dünner,20, fetter,21,- Horizontal<>,0, spiegeln,0, dehnen,0, stauchen,0,- Vertikal ^v,0, spiegeln,0, dehnen,0, stauchen,0,""
- DATA Hilfen ,0, Raster,25,-----,0, Hilfe-Seite,22,""
- DATA ""
- '
- ' Finde DIM-Grenzen
- RESTORE m_dat
- h%=0
- nmax%=0
- mmax%=0
- DO
- READ h$
- EXIT IF h$=""
- READ dummy%
- INC h%
- n%=0
- DO
- READ h$
- EXIT IF h$=""
- READ dummy%
- INC n%
- LOOP
- IF h%=1 THEN
- mmax%=n%
- ELSE
- nmax%=MAX(nmax%,n%)
- ENDIF
- LOOP
- DEC h%
- m.hs%=h%
- m.nmax%=nmax%
- DIM m.titel$(mmax%)
- DIM m.h_titl$(m.hs%+1),m.hx%(m.hs%+1),m.he%(m.hs%+1),m.hc$(m.hs%+1),m.ne%(m.hs%+1),m.ns%(m.hs%+1),m.ns_pix%(m.hs%+1)
- DIM m.n_titl$(m.hs%+1,m.nmax%+1),m.nc$(m.hs%+1,m.nmax%+1),m.nc_p%(m.hs%+1,m.nmax%+1),m.n_geht!(m.hs%+1,m.nmax%+1),m.com_nr%(m.hs%+1,m.nmax%+1)
- ARRAYFILL m.hx%(),0
- ARRAYFILL m.he%(),0
- ARRAYFILL m.ns%(),0
- ARRAYFILL m.ns_pix%(),19
- ARRAYFILL m.ne%(),0
- ARRAYFILL m.nc_p%(),0
- ARRAYFILL m.com_nr%(),0
- ARRAYFILL m.n_geht!(),TRUE
- '
- ' Fuelle Arrays, Finde Grenzen
- RESTORE m_dat
- h%=0
- DO
- READ h$
- EXIT IF h$=""
- READ dummy%
- m.titel$(h%)=h$
- INC h%
- LOOP
- '
- h%=0
- hx%=80 ! Linker Rand eines Menues
- DO
- READ h$
- EXIT IF h$=""
- READ dummy%
- INC h%
- m.h_titl$(h%)=h$
- m.hc$(h%)=LEFT$(h$,1)
- m.hx%(h%)=hx%
- ADD hx%,SHL(ADD(LEN(h$),1),3)
- m.he%(h%)=SUB(hx%,8)
- IF m.he%(h%)>scrn_breit_pix% THEN
- ALERT 1,"Menü|zu lang!",1,"WEITER",d%
- ENDIF
- n%=0
- DO
- READ h$
- EXIT IF h$=""
- INC n%
- READ m.com_nr%(h%,n%)
- m.n_titl$(h%,n%)=h$
- m.ne%(h%)=MAX(m.ne%(h%),SHL(ADD(LEN(h$),1),3))
- IF LEFT$(h$,1)="-" THEN
- m.n_geht!(h%,n%)=FALSE
- ELSE
- i%=0
- REPEAT
- INC i%
- UNTIL MID$(h$,i%,1)>"@" OR i%=LEN(h$)
- IF i%<LEN(h$) THEN
- m.nc$(h%,n%)=MID$(h$,i%,1)
- DEC i%
- m.nc_p%(h%,n%)=SHL(i%,3)
- ENDIF
- ENDIF
- LOOP
- ADD m.ne%(h%),m.hx%(h%)
- m.ns%(h%)=n%
- ADD m.ns_pix%(h%),ADD(SHL(n%,4),2)
- LOOP
- '
- MENU m.titel$()
- DEFMOUSE 0
- m.key&=0
- ABSOLUTE m.asc|,V:m.key&+1
- ABSOLUTE m.scan|,V:m.key&
- '
- RETURN ! m_init
- '
- PROCEDURE m_aufbau
- LOCAL i%
- DEFFILL 1,2,7
- PBOX 0,0,scrn_breit_pix%,scrn_hoeh_pix%
- DEFFILL 0,0
- PBOX 0,0,scrn_breit_pix%,17
- IF scrn_breit_byt%=160 THEN
- DEFTEXT ,4,,6
- TEXT 16,8,"Desk"
- tt!=TRUE
- ELSE
- DEFTEXT ,4,,13
- TEXT 16,13,"Desk"
- tt!=FALSE
- ENDIF
- DEFTEXT ,1,,13
- FOR i%=1 TO m.hs%
- TEXT m.hx%(i%),13,m.h_titl$(i%)
- LINE ADD(m.hx%(i%),1),15,ADD(m.hx%(i%),6),15
- NEXT i%
- LINE 0,17,scrn_breit_pix%,17
- LINE 0,18,scrn_breit_pix%,18
- RETURN ! m_aufbau
- '
- PROCEDURE main
- LOCAL idx%,t$,htitl$,hmen$,ntitl$,nmen$,oldhidx%,dummy%,abbruch!,no%,w%,hopen!,hidx%,nidx%
- '
- hopen!=FALSE
- abbruch!=FALSE
- '
- DO
- m.key&=0
- '
- SHOWM
- REPEAT
- '
- ON MENU
- MOUSE mx%,my%,mk%
- '
- IF mx%>80 AND mx%<m.he%(m.hs%) THEN
- ' Maus im moeglichen Menuebereich
- IF my%<18 THEN
- ' Maus im Menueleisten-Bereich
- idx%=0
- REPEAT
- INC idx%
- UNTIL (mx%>m.hx%(idx%) AND mx%<m.he%(idx%)) OR idx%>m.hs%
- IF idx%<=m.hs% THEN
- ' Gueltiger Hauptmenue-Index
- IF idx%<>hidx% THEN
- IF hidx%>0 THEN
- PUT m.hx%(hidx%),1,htitl$
- PUT m.hx%(hidx%),19,nmen$
- ENDIF
- hidx%=idx%
- oldhidx%=idx%
- GET m.hx%(hidx%),1,m.he%(hidx%),15,htitl$
- PUT m.hx%(hidx%),1,htitl$,10
- GET m.hx%(hidx%),19,m.ne%(hidx%),m.ns_pix%(hidx%),nmen$
- DEFFILL 0,0
- PBOX m.hx%(hidx%),19,m.ne%(hidx%),m.ns_pix%(hidx%)
- BOX m.hx%(hidx%),19,m.ne%(hidx%),m.ns_pix%(hidx%)
- FOR i%=1 TO m.ns%(hidx%)
- IF m.n_geht!(hidx%,i%) THEN
- DEFTEXT ,0,,13
- ELSE
- DEFTEXT ,2,,13
- ENDIF
- TEXT m.hx%(hidx%)+2,17+i%*16,m.n_titl$(hidx%,i%)
- IF m.n_geht!(hidx%,i%) AND m.nc$(hidx%,i%)<"[" THEN
- LINE m.hx%(hidx%)+3+m.nc_p%(hidx%,i%),19+i%*16,m.hx%(hidx%)+9+m.nc_p%(hidx%,i%),19+i%*16
- ENDIF
- NEXT i%
- hopen!=TRUE
- ENDIF
- ENDIF
- ELSE
- ' Maus im Bereich der Nebenmenues unter der Hauptmenue-Leiste
- IF hopen! THEN
- ' Nebenmenue aufgeklappt, sonst KEINE Aktion!
- IF my%>19 AND my%<m.ns_pix%(hidx%) AND mx%>m.hx%(hidx%) AND mx%<m.ne%(hidx%) THEN
- ' Maus im exakten Nebenmenue-Bereich
- SUB my%,19
- idx%=MIN(m.ns%(hidx%),ADD(SHR(my%,4),1))
- IF idx%<>nidx% THEN
- ' Nur wenn sich der Index geaendert hat!
- IF nidx%>0 THEN
- ' Alten Nebenmenue-Index, sofern schon invertiert, restaurieren
- PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$
- ENDIF
- ' Endlich!
- nidx%=idx%
- IF m.n_geht!(hidx%,nidx%) THEN
- GET m.hx%(hidx%)+2,5+nidx%*16,m.ne%(hidx%)-2,20+nidx%*16,ntitl$
- PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$,10
- ELSE
- nidx%=0
- ENDIF
- ENDIF
- ELSE
- ' Maus ausserhalb des Nebenmenue-Bereiches
- IF nidx%>0 THEN
- PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$
- ENDIF
- nidx%=0
- ENDIF
- ENDIF
- ENDIF
- ELSE
- IF mx%<80 OR mx%>m.ne%(m.hs%) THEN
- ' Maus ausserhalb des rechten Randes
- IF nidx%>0 THEN
- PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$
- ENDIF
- nidx%=0
- ENDIF
- IF mx%<80 AND my%<18 THEN
- ' Maus zeigt auf DESKTOP-Eintrag!
- IF hidx%>0 THEN
- ' Falls Nebenmenue offen und Hauptmenuepunkt invertiert: Zuklappen
- PUT m.hx%(hidx%),1,htitl$
- PUT m.hx%(hidx%),19,nmen$
- ENDIF
- hidx%=0
- hopen!=FALSE
- ENDIF
- ENDIF
- UNTIL m.key&>0 OR mk%>0
- HIDEM
- '
- IF mk%>0 THEN
- IF mx%>24 AND mx%<270 AND my%>31 AND my%<374 THEN
- IF NOT hopen! THEN
- ' Irgendeine Aktion in diesem Feld
- ENDIF
- ENDIF
- IF mx%>312 AND mx%<440 AND my%>48 AND my%<302 THEN
- IF NOT hopen! THEN
- ' Irgendeine Aktion in diesem Feld
- ENDIF
- ENDIF
- ' Menuepunkt angeklickt
- IF nidx%>0 THEN
- PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$
- ENDIF
- IF hidx%>0 THEN
- ' Falls Nebenmenue offen und Hauptmenuepunkt invertiert: Zuklappen
- PUT m.hx%(hidx%),1,htitl$
- PUT m.hx%(hidx%),19,nmen$
- ENDIF
- IF hidx%=0 OR nidx%=0 THEN
- hidx%=0
- nidx%=0
- ENDIF
- hopen!=FALSE
- ELSE
- ' Taste betaetigt
- t$=UPPER$(CHR$(m.asc|))
- IF hopen! THEN
- ' Hauptmenue offen, Nebenmenues heruntergeklappt
- ' Finde Nebenmenue-Index
- idx%=0
- REPEAT
- INC idx%
- UNTIL t$=m.nc$(hidx%,idx%) OR idx%>m.ns%(hidx%)
- IF idx%<=m.ns%(hidx%) THEN
- ' Gueltiger Nebenmenue-Index
- IF idx%<>nidx% THEN
- ' Nur wenn sich der Index geaendert hat!
- IF nidx%>0 THEN
- ' Alten Nebenmenue-Index, sofern schon invertiert, restaurieren
- PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$
- ENDIF
- ' Endlich!
- nidx%=idx%
- GET m.hx%(hidx%)+2,5+nidx%*16,m.ne%(hidx%)-2,20+nidx%*16,ntitl$
- PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$,10
- ENDIF
- ELSE
- ' Buchstabe NICHT ein gueltiger Anfangsbuchstabe: Zuklappen
- PUT m.hx%(hidx%),1,htitl$
- PUT m.hx%(hidx%),19,nmen$
- hidx%=0
- nidx%=0
- hopen!=FALSE
- ENDIF
- ELSE
- @direkt_befehl
- ' Nebenmenue noch nicht heruntergeklappt
- idx%=0
- REPEAT
- INC idx%
- UNTIL t$=m.hc$(idx%) OR idx%>m.hs%
- IF idx%<=m.hs% THEN
- ' Gueltiger Hauptmenue-Index
- IF mx%<80 AND my%<18 THEN
- ' Maus zeigt auf DESKTOP-Eintrag!
- SETMOUSE m.hx%(idx%)+8,my%
- ENDIF
- IF idx%<>hidx% THEN
- IF hidx%>0 THEN
- PUT m.hx%(hidx%),1,htitl$
- PUT m.hx%(hidx%),19,nmen$
- ENDIF
- hidx%=idx%
- oldhidx%=idx%
- GET m.hx%(hidx%),1,m.he%(hidx%),15,htitl$
- PUT m.hx%(hidx%),1,htitl$,10
- GET m.hx%(hidx%),19,m.ne%(hidx%),m.ns_pix%(hidx%),nmen$
- DEFFILL 0,0
- PBOX m.hx%(hidx%),19,m.ne%(hidx%),m.ns_pix%(hidx%)
- BOX m.hx%(hidx%),19,m.ne%(hidx%),m.ns_pix%(hidx%)
- FOR i%=1 TO m.ns%(hidx%)
- IF m.n_geht!(hidx%,i%) THEN
- DEFTEXT ,0,,13
- ELSE
- DEFTEXT ,2,,13
- ENDIF
- TEXT m.hx%(hidx%)+2,17+i%*16,m.n_titl$(hidx%,i%)
- IF m.n_geht!(hidx%,i%) AND m.nc$(hidx%,i%)<"[" THEN
- LINE m.hx%(hidx%)+3+m.nc_p%(hidx%,i%),19+i%*16,m.hx%(hidx%)+9+m.nc_p%(hidx%,i%),19+i%*16
- ENDIF
- NEXT i%
- hopen!=TRUE
- ENDIF
- ELSE
- ' Buchstabe KEIN gueltiger Hauptmenue-Anfangsbuchstabe
- IF hidx%>0 THEN
- ' Falls Nebenmenue offen und Hauptmenuepunkt invertiert: Zuklappen
- PUT m.hx%(hidx%),1,htitl$
- PUT m.hx%(hidx%),19,nmen$
- ENDIF
- hidx%=0
- nidx%=0
- hopen!=FALSE
- ENDIF
- ENDIF
- ENDIF
- '
- IF hidx%>0 AND nidx%>0 THEN
- PUT m.hx%(hidx%),1,htitl$
- PUT m.hx%(hidx%),19,nmen$
- no%=m.com_nr%(hidx%,nidx%)
- hidx%=0
- nidx%=0
- hopen!=FALSE
- @ausfuehren(no%,mk%)
- ENDIF
- '
- EXIT IF abbruch!
- '
- LOOP
- RETURN ! main
- '
- PROCEDURE ausfuehren(num%,click%)
- SELECT num%
- CASE 1 ! LADEN
- CASE 2 ! SPEICHERN
- CASE 3 ! QUIT
- IF click%>0 THEN
- PAUSE 20
- ENDIF
- ALERT 2,"FNT_ED.GFA|Wirklich Verlassen?",1,"JA|Nein",w%
- IF w%=1 THEN
- abbruch!=TRUE
- ENDIF
- CASE 4 ! WechsleFont
- CASE 6 ! BLANK
- CASE 7 ! SYSTEM-Font
- CASE 8 ! INVERTIEREN
- CASE 15 ! COPY Char
- CASE 16 ! PASTE Char
- CASE 17 ! KILL Char
- CASE 18 ! INVERT Char
- CASE 19 ! TAUSCHE Char
- CASE 22 ! HILFE
- CASE 25 ! RASTER
- DEFAULT
- IF click%>0 THEN
- PAUSE 20
- ENDIF
- ALERT 1,"Funktion "+STR$(no%)+"|Noch nicht|Implementiert!",1,"WEITER",dummy%
- ENDSELECT
- RETURN ! ausfuehren
- '
- PROCEDURE direkt_befehl
- LOCAL x%,y%,k%
- LOCAL adr%,i%,w|
- adr%=SHL(chr%,4)
- ADD adr%,fntadr%
- SELECT m.scan|
- CASE &H4B
- CASE &H4D
- CASE &H48
- CASE &H50
- CASE &H4A ! -
- CASE &H4E ! +
- CASE 46 ! C
- CASE 25 ! P
- CASE 23 ! I
- CASE 20 ! T
- ENDSELECT
- RETURN ! direkt_befehl
- '
- PROCEDURE m_getkey
- m.key&=MENU(14)
- RETURN
- '
- PROCEDURE m_deal
- @m_aufbau
- RETURN ! m_deal
- '
- PROCEDURE schluss
- MENU KILL
- END
- RETURN ! abmelden
- '
-
-